#ifndef BASIC_DEFINE_H_
#define BASIC_DEFINE_H_

#include "render_system/gl_render_system_define.h"

class PixelFormat
{
public:
    GL_RENDER_SYSTEM_API static const PixelFormat PF_RGBA_8U;
    GL_RENDER_SYSTEM_API static const PixelFormat PF_RGBA_32F;
    GL_RENDER_SYSTEM_API static const PixelFormat PF_RGB_8U;
    GL_RENDER_SYSTEM_API static const PixelFormat PF_RGB_32F;
    GL_RENDER_SYSTEM_API static const PixelFormat PF_RG_8U;
    GL_RENDER_SYSTEM_API static const PixelFormat PF_RG_32F;
    GL_RENDER_SYSTEM_API static const PixelFormat PF_R_32U;
    GL_RENDER_SYSTEM_API static const PixelFormat PF_R_32F;

public:
    GL_RENDER_SYSTEM_API PixelFormat();
    GL_RENDER_SYSTEM_API ~PixelFormat();

    GL_RENDER_SYSTEM_API PixelFormat(const PixelFormat& lvalue);

    GL_RENDER_SYSTEM_API PixelFormat& operator = (const PixelFormat& lvalue);

    GL_RENDER_SYSTEM_API bool operator == (const PixelFormat& lvalue) const;

    // get method
    GL_RENDER_SYSTEM_API size_t glInternalFormat() const;
    GL_RENDER_SYSTEM_API size_t glFormat() const;
    GL_RENDER_SYSTEM_API size_t channels() const;
    GL_RENDER_SYSTEM_API size_t glStorageType() const;
    GL_RENDER_SYSTEM_API size_t bytes() const;

private:
    PixelFormat(
        const size_t internalFormat,
        const size_t sourceformat,
        const size_t ch,
        const size_t type,
        const size_t storage);

private:
    size_t _GLinternalFormat;
    size_t _GLformat;
    size_t _channels;
    size_t _GLstorageType;
    size_t _storageBytes;
};


#endif